package com.guigu.guliorder.feign;

import com.guigu.gulicommon.entity.dto.WareSkuLockDto;
import com.guigu.gulicommon.entity.pojo.res.Res;
import com.guigu.gulicommon.entity.vo.FareVo;
import com.guigu.gulicommon.entity.vo.HasStockSkuVo;
import com.guigu.gulicommon.entity.vo.LockStockVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 仓储远程调用服务
 *
 * @author 陈俊杰
 * @version 1.0
 * @since 2024/9/26 14:13
 */
@FeignClient(name = "gateway-server", path = "/api/ware", contextId = "WareServer")
public interface WareServer {
    /**
     * 根据skuId查询商品库存
     *
     * @param skuIds skuIds
     * @return 单款商品库存信息
     */
    @PostMapping("/wms-ware-sku/stockBySkuIds")
    Res<HasStockSkuVo> getStockBySkuId(@RequestBody List<Long> skuIds);

    /**
     * 根据地址id获取运费信息
     *
     * @param addrId 收货地址id
     * @return 邮费信息
     */
    @GetMapping("/wms-ware-info/fare")
    Res<FareVo> getFareByAddrId(@RequestParam("addrId") Long addrId);

    /**
     * 锁定订单对应的商品库存
     *
     * @param wareSkuLockDto 锁定库存信息
     * @return 锁定结果
     */
    @PostMapping("/wms-ware-sku/lockStock")
    Res<LockStockVo> orderLockStock(@RequestBody WareSkuLockDto wareSkuLockDto);
}
